/**
 *
 */
package com.gbb.common.utils;

import java.lang.reflect.Method;

import android.content.Context;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

/**
 * 软键盘控制
 */
public class KeyBoardUtils {

    /**
     * 打卡软键盘
     *
     * @param mContext 上下文
     * @param mEditText 输入框
     */
    public static void openKeyboard(Context mContext,EditText mEditText){
        InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
        if(imm != null) {
            imm.showSoftInput(mEditText,InputMethodManager.RESULT_SHOWN);
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
        }
    }

    /**
     * 关闭软键盘
     *
     * @param mContext 上下文
     * @param mEditText 输入框
     */
    public static void closeKeyboard(Context mContext,EditText mEditText){
        InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
        if(imm != null) {
            imm.hideSoftInputFromWindow(mEditText.getWindowToken(),0);
        }
    }

    /**
     * 隐藏系统弹出的键盘,显示出光标
     * 备注:Android.edittext点击时,隐藏系统弹出的键盘,显示出光标
     * 3.0以下版本可以用editText.setInputType(InputType.TYPE_NULL)来实现。
     * 3.0以上版本除了调用隐藏方法:setShowSoftInputOnFocus(false)
     *
     * @param editText 输入框EditText
     */
    public static void hideSysKeyBoard(EditText editText){
        Class<EditText> cls = EditText.class;
        try {
            Method setShowSoftInputOnFocus = cls.getMethod("setSoftInputShownOnFocus",boolean.class);
            setShowSoftInputOnFocus.setAccessible(false);
            setShowSoftInputOnFocus.invoke(editText,false);
            setShowSoftInputOnFocus.invoke(editText,false);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 隐藏软键盘
     *
     * @param mContext 上下文
     * @param view View
     */
    public static void hideSoftInput(Context mContext,View view){
        InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
        if(imm != null) {
            imm.hideSoftInputFromWindow(view.getWindowToken(),0);
        }
        if(view instanceof EditText) {
            view.clearFocus();
        }
    }

    public static boolean isShouldHideInput(View v,MotionEvent event){
        if(v != null && (v instanceof EditText)) {
            int[] leftTop = {0,0};
            // 获取输入框当前的location位置
            v.getLocationInWindow(leftTop);
            int left = leftTop[0];
            int top = leftTop[1];
            int bottom = top + v.getHeight();
            int right = left + v.getWidth();
            return !(event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom);
        }
        return false;
    }

}
